今天研究更早期的MUD
TinyMUD 在當時最出名的事蹟是它開放了一般玩家創建自己的房間和物件,導致伺服器被大量玩家建立的物件塞爆(當時伺服器記憶體上限32MB)而被迫關閉,而後作者釋出程式碼開放給其他玩家自行建立 MUD,衍生出 MUSH 的譜系。詳情可參考:TinyMUD - Wikipedia
TinyMUD 被認為是社會導向 MUD,主要遊戲內容以社交互動為主。而 LPMUD 則是因為先天設計的關係,非常適合呈現戰鬥場景,所以吸引很多 RPG 玩家,被認為是戰鬥導向 MUD。
這是我最早從文獻上知道的網路泥巴,對我有一定的代表性,抱著朝聖的心情看它的程式碼。原始碼全部才54kb,非常小巧精美,但相對的,有很多指令和架構都沒有。可是在當時完成了許多玩家的想像
以下是這份程式碼概要說明
constants.h 常數
globals 全局變數
strings 字串處理,可能會跟現有的標準庫衝突
utils.h 工具,刪除物件、刪除映射、載入資料
player 玩家物件,帳號訊息、連線資訊
room 房間物件,描述、出口
comms.cpp 連線物件,主迴圈處理使用者網路連線
states.cpp 狀態物件,用來處理連線認證過程,採用狀態機方式實作
commands.cpp 命令物件
tinymudserver.cpp 主程式檔
命令列表
look,l
quit
say,
tell
shutdown
help
goto
transfer
setflag
clearflag
save
chat
emote
who
主檔內容:載入物件、啟動連線、主迴圈、關閉連線
我不確定我找到的這份是原始的 TinyMUD,有可能是後來其他人復刻的模仿作品,因為沒看到裡面給玩家創造房間和物件的指令。這份程式碼跟 LPMUD 比較大的差異是他所有的房間定義全部塞在一個檔案內,看完前面 mudlib 再看這個會覺得壓迫感沒那麼重,但物件、特徵一些遊戲機制要自己重新建立,而且也沒有支援 LPC 語言,要擴充的話就要原生的程式語言寫。如果有人有找到當初原始的 TinyMUD 也希望你跟我說,在此感謝
另外也有一些人研究的重心是如何寫出小而美的16k MUD架構,但這跟創造遊戲內容比較無關就是了。
最後放上 TinyMUD 當年經典的玩家指令聞香一下 via 維基百科
@chown <object>=<player>. 更改物件的擁有人
@create <name> [=<cost>]. 用指定名稱建立物件
@describe <object> [=<description>]. 加入物件的描述
@dig <name>. 創造房間
@find [name]. 尋找物件,顯示和物件名稱對應的編號
@name <object>=<new name> [<password>]. 更改物件的名稱
@open <dir>[;<other dir>]* [=<number>]. 打開路徑
@set <object>=<flag>; @set <object>=!<flag>. 設置旗標
@link <object>=<number>; @link <object>=here; @link <dir>|<room>=home. 連結
@unlink <dir>; @unlink here. 取消連結
@lock <object>=<key>. 鎖定
@unlock <object>. 取消鎖定
看起來是同一組但沒說明用途
@fail <object> [=<message>].
@ofail <object> [=<message>].
@success <object> [=<message>].
@osuccess <object> [=<message>].